第零關
簡單說明遊戲背景,跟複習周的 HTTP Challenge 有所關聯,講解後續一樣用/lv1.php?token=xxx
的方式來破關,提示則是用/lv1.php?hint=help
的方式。第一關
要把100101001001100001110
二進位制轉成十八進位制,我原先找到這個網站,結果他給我的答案是錯的,所以我又找了另一個網站,得到的答案把大寫改成小寫就對了。第二關
尋找畫面裡的怪物,那就是藏在 html 和 CSS 的程式碼囉,就會看到有一行<div class="hidden"> {divsurprise} </div>
把 class 的 CSS 取消掉,就會看到它顯現在畫面上。
第三關
好樣的,又一個潛藏在裡面的怪物,再看一次程式碼,這次藏的地方是在註解的位置<!-- {commentfaker} -->
。
第四關
遭遇替身攻擊,複製最底下紅字大括號內的文字,會得到csspersona!
,繼續前往下一關。
第五關
我死了嗎?網址轉到第六關,細看lv5.js
,只有一行window.location='./lv6.php?token=fail';
,沒有其他東西,找第五關提示,得到的是javascript 出了什麼事了
。
在看了兩篇攻略文:關於我逃出胡立的異世界 R30 這件事之攻略包和r3:0 異世界網站挑戰- 破關紀錄之後才知道,在要跳轉頁面的當下按下Esc
,就能看到畫面出現{windowhack}
的 token。
那這樣我就得懷疑是我之前擷取 html 沒有注意到... 我的蠢方法是一按下網址就點網址列左邊的 X 讓它停止載入,應該也是看的到,只是我沒注意到(暈倒)。- 解法一:
解出檔案裡面顏文字的秘密,或找到 window 裡面隱藏的 token 資訊。
,因為上一題卡了很久,所以有查到可以在 console 下window
的指令,看到整個window
的資訊,再搜尋 token 找到__IamToken: "emojicute"
這行。 解法二:
看lv6.js
會看到底下一長串的 emoji,把開頭拿去查詢,可以找到第一個 decode 的網站,接著把那段複製貼上,得到window.__IamToken = "emojicute"
,一樣可以得到 token,原因在這篇有解釋。
第七關
檢查,看 Network 裡面對這個網址的 Request Headers,找到一行Cookie:TokenIsMe={cookieyumyum}
。
第八關
檢查,看 Network 裡面對這個網址的 Request Headers,找到一行TokenIsMe:{headshot}
。
第九關
看 HTML 會看到以下的註解:<!-- secret logic function isTokenValid($token) { if (strlen($token) !== 8) return false; for($i = 1; $i <= 7; $i+=2) { if ((ord($token[$i]) * ord($token[$i - 1])) % $i !== 0) { return false; } } return true; } -->
翻找 ASCII 碼表,隨便帶進去只要符合:
- token 是八位
- 每個偶數位的 ASCII 十進位與前一位 ASCII 十進位相乘,除以該偶數位的位置 - 1,要整除
就是答案啦,像我就用AABBFFFF
。
第十關
這之後就不能再只用 dev tool 解題啦,所以是換 node.js 上場的時候。
從 dev tool 的 Network 可以找到一個https://r30-api.herokuapp.com/api.php
的網址,以這個網址為 url 向它傳送 post request 得到{"token":["sosdan"]}
。
第十一關
系統要我們到新聞版去看看,在那裏的管理者登入介面,實際上登入按鈕是沒有效的XD,從 Network 去看 news.js 的內容,會看到有一行fetch(`./news_api.php?id=${id}`)
那就是我們要發 request 的 url。
在 request 這條網址的後面,要加上id=888888
因為被鎖的那篇公告 id 就是 888888。看要用 node.js 發 GET 或是直接網址用 query string 的方式,都可以得到 token 的訊息能看到這則留言的你,想必就是天選之人吧! {fakeituntilyoumakeit} 拯救這個世界吧!
。
第十二關
打開 dev tool 看這個網址的 response,就會看到Set-Cookie:token=do_you_really_know_how_to_set_cookie?; Comment=real_token_is:{you_are_cookie_master}
。
第十三關
猜數字,原本我有打算用 node.js 跑 request 但會遇到不同步的問題,所以作罷,最後就純粹猜數字,用https://r30challenge.herokuapp.com/lv14.php?token=
後面接四位數字去猜,正常大概會是 200ms 左右,1A 時間會拉長成 1 秒多,2A 就再往上加,從 4 碼同一個數字開始把答案的四個數字抓出來,分別是 1 3 5 7,接著就是排列組合去測,測到 5371 就進入下一關。第十四關
跟時間賽跑!!!!! 打開 dev tool 會看到以下的東西:<!-- secret logic function isTokenValid($token) { $h = date('H'); $m = date('i'); $a = $h * $m + 42; $count = 0; for($i = 0; $i < 8; $i++) { $count += ord($token[$i]) - 65; } if ($count <= 100) { return false; } return $a % $count === 0; } -->
與第九關一樣,只要符合條件就可以通過,只是這次有時間壓力,我會建議用比現在時間晚一點點來做,比較不用追著時間跑,一直更改 token,這次的條件是:
- 你當下的時間(可以看畫面中給的數字鐘),
小時 * 分鐘 + 42
作為被除數 - token 一樣是 8 碼,只是 8 碼的 ASCII 十進位值,要至少大於 620。
- token 的每一碼取 ASCII 十進位值減去 65 後加總,作為除數。
- 只要這項除法可以被整除,就可以全破了!
- 第十五關--完結
心得
整體來說,維持第五周複習周 http challenge 的調性與有趣,整合第 6~9 周學習到與 request, cookie, php 等內容,而且又加上了一些動態變化的 token 而不再只有單一解答,讓整個遊玩過程的豐富度提升了一些。
最令我驚豔的就屬第六關的 emoji 、第十一關的新聞版以及第十四關的時間賽跑,原來 emoji 本身也是可以作為密碼的一種,沒想到用來傳達自己當下情緒的 emoji 竟然還能轉換成文字;新聞版那個網頁做的超級有模有樣的,我一瞬間還以為我在逛 ptt,就像是一個 ptt 的超陽春版,但基本的樣子都有了,超酷;時間賽跑這個則是一邊想符合的密碼有什麼,一邊還要看自己選的時間是不是過了,壓力好大XD
總的來說,我認為這次的解謎比起上一次有更大的進展,令我很好奇,當這堂課結束,我們會碰到什麼樣的解謎遊戲呢~